home *** CD-ROM | disk | FTP | other *** search
- ;*************************************
- ; VRAM Direct Access Program
- ;*************************************
-
- extrn page_ofs:dword
- extrn errno:word
-
- bitptn segment 'DATA'
-
- ;*************************************
- ; 16色VRAMビットパタ-ン
- ;*************************************
-
- slp_tim dw 0FFFFh ; anime sleep time
- ankfnt dd 16*256 dup(?)
- fntcol dd 256 dup(?)
- fntptn dd 000000000h,0F0000000h,00F000000h,0FF000000h
- dd 000F00000h,0F0F00000h,00FF00000h,0FFF00000h
- dd 0000F0000h,0F00F0000h,00F0F0000h,0FF0F0000h
- dd 000FF0000h,0F0FF0000h,00FFF0000h,0FFFF0000h
- dd 00000F000h,0F000F000h,00F00F000h,0FF00F000h
- dd 000F0F000h,0F0F0F000h,00FF0F000h,0FFF0F000h
- dd 0000FF000h,0F00FF000h,00F0FF000h,0FF0FF000h
- dd 000FFF000h,0F0FFF000h,00FFFF000h,0FFFFF000h
- dd 000000F00h,0F0000F00h,00F000F00h,0FF000F00h
- dd 000F00F00h,0F0F00F00h,00FF00F00h,0FFF00F00h
- dd 0000F0F00h,0F00F0F00h,00F0F0F00h,0FF0F0F00h
- dd 000FF0F00h,0F0FF0F00h,00FFF0F00h,0FFFF0F00h
- dd 00000FF00h,0F000FF00h,00F00FF00h,0FF00FF00h
- dd 000F0FF00h,0F0F0FF00h,00FF0FF00h,0FFF0FF00h
- dd 0000FFF00h,0F00FFF00h,00F0FFF00h,0FF0FFF00h
- dd 000FFFF00h,0F0FFFF00h,00FFFFF00h,0FFFFFF00h
- dd 0000000F0h,0F00000F0h,00F0000F0h,0FF0000F0h
- dd 000F000F0h,0F0F000F0h,00FF000F0h,0FFF000F0h
- dd 0000F00F0h,0F00F00F0h,00F0F00F0h,0FF0F00F0h
- dd 000FF00F0h,0F0FF00F0h,00FFF00F0h,0FFFF00F0h
- dd 00000F0F0h,0F000F0F0h,00F00F0F0h,0FF00F0F0h
- dd 000F0F0F0h,0F0F0F0F0h,00FF0F0F0h,0FFF0F0F0h
- dd 0000FF0F0h,0F00FF0F0h,00F0FF0F0h,0FF0FF0F0h
- dd 000FFF0F0h,0F0FFF0F0h,00FFFF0F0h,0FFFFF0F0h
- dd 000000FF0h,0F0000FF0h,00F000FF0h,0FF000FF0h
- dd 000F00FF0h,0F0F00FF0h,00FF00FF0h,0FFF00FF0h
- dd 0000F0FF0h,0F00F0FF0h,00F0F0FF0h,0FF0F0FF0h
- dd 000FF0FF0h,0F0FF0FF0h,00FFF0FF0h,0FFFF0FF0h
- dd 00000FFF0h,0F000FFF0h,00F00FFF0h,0FF00FFF0h
- dd 000F0FFF0h,0F0F0FFF0h,00FF0FFF0h,0FFF0FFF0h
- dd 0000FFFF0h,0F00FFFF0h,00F0FFFF0h,0FF0FFFF0h
- dd 000FFFFF0h,0F0FFFFF0h,00FFFFFF0h,0FFFFFFF0h
- dd 00000000Fh,0F000000Fh,00F00000Fh,0FF00000Fh
- dd 000F0000Fh,0F0F0000Fh,00FF0000Fh,0FFF0000Fh
- dd 0000F000Fh,0F00F000Fh,00F0F000Fh,0FF0F000Fh
- dd 000FF000Fh,0F0FF000Fh,00FFF000Fh,0FFFF000Fh
- dd 00000F00Fh,0F000F00Fh,00F00F00Fh,0FF00F00Fh
- dd 000F0F00Fh,0F0F0F00Fh,00FF0F00Fh,0FFF0F00Fh
- dd 0000FF00Fh,0F00FF00Fh,00F0FF00Fh,0FF0FF00Fh
- dd 000FFF00Fh,0F0FFF00Fh,00FFFF00Fh,0FFFFF00Fh
- dd 000000F0Fh,0F0000F0Fh,00F000F0Fh,0FF000F0Fh
- dd 000F00F0Fh,0F0F00F0Fh,00FF00F0Fh,0FFF00F0Fh
- dd 0000F0F0Fh,0F00F0F0Fh,00F0F0F0Fh,0FF0F0F0Fh
- dd 000FF0F0Fh,0F0FF0F0Fh,00FFF0F0Fh,0FFFF0F0Fh
- dd 00000FF0Fh,0F000FF0Fh,00F00FF0Fh,0FF00FF0Fh
- dd 000F0FF0Fh,0F0F0FF0Fh,00FF0FF0Fh,0FFF0FF0Fh
- dd 0000FFF0Fh,0F00FFF0Fh,00F0FFF0Fh,0FF0FFF0Fh
- dd 000FFFF0Fh,0F0FFFF0Fh,00FFFFF0Fh,0FFFFFF0Fh
- dd 0000000FFh,0F00000FFh,00F0000FFh,0FF0000FFh
- dd 000F000FFh,0F0F000FFh,00FF000FFh,0FFF000FFh
- dd 0000F00FFh,0F00F00FFh,00F0F00FFh,0FF0F00FFh
- dd 000FF00FFh,0F0FF00FFh,00FFF00FFh,0FFFF00FFh
- dd 00000F0FFh,0F000F0FFh,00F00F0FFh,0FF00F0FFh
- dd 000F0F0FFh,0F0F0F0FFh,00FF0F0FFh,0FFF0F0FFh
- dd 0000FF0FFh,0F00FF0FFh,00F0FF0FFh,0FF0FF0FFh
- dd 000FFF0FFh,0F0FFF0FFh,00FFFF0FFh,0FFFFF0FFh
- dd 000000FFFh,0F0000FFFh,00F000FFFh,0FF000FFFh
- dd 000F00FFFh,0F0F00FFFh,00FF00FFFh,0FFF00FFFh
- dd 0000F0FFFh,0F00F0FFFh,00F0F0FFFh,0FF0F0FFFh
- dd 000FF0FFFh,0F0FF0FFFh,00FFF0FFFh,0FFFF0FFFh
- dd 00000FFFFh,0F000FFFFh,00F00FFFFh,0FF00FFFFh
- dd 000F0FFFFh,0F0F0FFFFh,00FF0FFFFh,0FFF0FFFFh
- dd 0000FFFFFh,0F00FFFFFh,00F0FFFFFh,0FF0FFFFFh
- dd 000FFFFFFh,0F0FFFFFFh,00FFFFFFFh,0FFFFFFFFh
- ;**********************************************
- ; 漢字コ-ドチェックテ-ブル
- ;**********************************************
- ISKAN1 equ 1
- ISKAN2 equ 2
- ; 0 1 2 3 4 5 6 7 8 9 A B C D E F
- kantbl db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;0
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;1
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;2
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;3
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;4
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;5
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;6
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0 ;7
- db 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ;8
- db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ;9
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;A
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;B
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;C
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;D
- db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ;E
- db 3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0 ;F
- bitptn ends
-
- VRAM segment 'CODE'
- assume cs:VRAM,ds:bitptn
- ;**************************************
- ; String to VRAM Display
- ;**************************************
- ; putstr(char *vram, char *str)
- ; +8 +12
- ;**************************************
- align 4 ; align set
- public putstr
- putstr proc near
- push ebp
- mov ebp,esp
- xor eax,eax
- push eax ; work push
-
- push gs
- push fs
- push es
- push esi
- push edi
- push edx
- push ecx
- push ebx
- cld
- mov ax,104h ; VRAM Selecter
- mov es,ax ; es = VRAM Selecter
- mov ax,0110h ; TBIOS Selecter
- mov fs,ax ; fs = TBIOS
- mov ax,ds
- mov gs,ax ; gs = ds
-
- align 4 ; align set
- putlop: ; Put Loop
- mov esi,[ebp+12] ; char *str
- putlp2:
- lodsb ; Get String ※
- or al,al
- je Left_clear ; End of String ?
-
- cmp al,0Ah ; \n skip
- je putlp2
-
- movzx eax,al
- mov bl,[eax+offset kantbl]
- and bl,ISKAN1
- jz putank ; Not iskanji1 ?
- movzx ebx,byte ptr [esi]
- mov bh,[ebx+offset kantbl]
- and bh,ISKAN2
- jz putank ; Not iskanji2 ?
- mov bh,al
- inc esi ; doubel_word ????? ※
- mov [ebp+12],esi ; Save *str
-
- shl bh,1 ; Shift Jis to Jis
- cmp bl,080h
- adc bx,1f61h
- add bl,7fh
- jc short knf1
- add bl,0a2h
- knf1: and bh,7fh ; StoJ end
-
- mov ax,0100h
- mov dx,1010h
-
- call pword ptr fs:[00a0h] ; Get Kanji Font
-
- mov edi,ss:[ebp+8] ; *vram
- add edi,ss:[ebp-4] ; work add
- or edi,gs:[page_ofs] ; or Page Offset
- mov ebx,offset fntcol
- xor edx,edx ; edx=0
- xor ecx,ecx ; ecx=0
- REPT 16
- lodsw ; Get Kanji Font Pattern
- mov cl,al ; Left Font Pattern
- mov dl,ah ; Right Font Pattern
- mov eax,gs:[ebx+ecx*4] ; Get Vram Bit Patan
- stosd ; Write Left Font
- mov eax,gs:[ebx+edx*4] ; Get Vram Bit Patan
- stosd ; Write Right Font
- add edi,512-4*2 ; 1 Line 512 Byte
- endm
- mov ax,gs
- mov ds,ax
- add dword ptr [ebp-4],8 ; Next vram Address
-
- jmp putlop ; Next Put String Loop
-
- align 4 ; align set
- putank: ; Write Ank Font
- mov [ebp+12],esi ; Save *str
- movzx esi,al
- shl esi,6 ; 4x16=64
- add esi,offset ankfnt ; ANK Font Table Offset
-
- mov edi,[ebp+8] ; *vram
- add edi,[ebp-4] ; work add
- or edi,[page_ofs] ; or Page Offset
- mov ebx,512-4
- REPT 15
- movsd ; Trans Font
- add edi,ebx ; Line add
- endm
- movsd ; Trans Font
- add dword ptr [ebp-4],4 ; Next vram Address
-
- jmp putlop ; Next Put String Loop
-
- align 4
- Left_clear:
- ; VRAM Clear
- mov ebx,320
- sub ebx,[ebp-4] ; nokori dword
- je nonclr
-
- mov edi,[ebp+8] ; *vram
- add edi,[ebp-4] ; work add
- or edi,[page_ofs] ; or Page Offset
- shr ebx,2 ; / 4
- mov ebp,[ebp-4]
- add ebp,512-320
- mov eax,[fntcol]
- mov edx,03FFFFh
- mov esi,[page_ofs]
- REPT 16
- mov ecx,ebx ; nokori dword
- rep stosd
- add edi,ebp
- and edi,edx
- or edi,esi
- endm
- nonclr:
- ; end of VRAM Clear
- pop ebx
- pop ecx
- pop edx
- pop edi
- pop esi
- pop es
- pop fs
- pop gs
-
- pop eax ; work pop
- pop ebp
- ret ; end of putstr
-
- putstr endp
- ;***************************************************
- ; void ctblset(int Chr_Col,int Bak_Col);
- ;***************************************************
- public ctblset
- ctblset proc near
- push ebp
- mov ebp,esp
- push esi
- push edi
- push fs
-
- mov ecx,256
- mov esi,offset fntptn
- mov edi,offset fntcol
- ctblp: lodsd
- mov edx,eax
- not edx
- and eax,[ebp+8]
- and edx,[ebp+12]
- or eax,edx
- stosd
- loop ctblp
-
- mov ax,138h ; ANK Font Selecter
- mov fs,ax
- mov esi,3D800h
- mov edi,offset ankfnt
-
- mov ecx,16*256
- aktb1: movzx eax,byte ptr fs:[esi]
- inc esi
- mov eax,[eax*4+fntcol]
- stosd
- loop aktb1
-
- pop fs
- pop edi
- pop esi
- pop ebp
- ret
- ctblset endp
- public inport
- ;****************************************************************************
- ; wrtstr(char *str, int page, char *vram, int forcol, int bakcol, int font)
- ; +8 +12 +16 +20 +24 +28
- ;****************************************************************************
- align 4 ; align set
- public wrtstr
- wrtstr proc near
- push ebp
- mov ebp,esp
- push gs
- push fs
- push es
- push esi
- push edi
- push ebx
-
- mov ax,104h ; VRAM Selecter
- mov gs,ax ; gs = VRAM Selecter
- mov ax,110h ; TBIOS Selecter
- mov fs,ax ; fs = TBIOS
-
- align 4 ; align set
- wrtlop: ; Put Loop
- mov esi,[ebp+8] ; char *str
- movzx eax,byte ptr [esi]
- inc si
- or al,al
- jnz short wrtnxt ; End of String ?
-
- pop ebx
- pop edi
- pop esi
- pop es
- pop fs
- pop gs
- pop ebp
- ret ; end of putstr
-
- align 4 ; align set
- wrtnxt:
- mov bl,[eax+offset kantbl]
- and bl,ISKAN1
- jz wrtank ; Not iskanji1 ?
- movzx ebx,byte ptr [esi]
- mov bh,[ebx+offset kantbl]
- and bh,ISKAN2
- jz wrtank ; Not iskanji2 ?
- mov bh,al
- inc si
- mov [ebp+8],esi ; Save *str
-
- shl bh,1 ; Shift Jis to Jis
- cmp bl,080h
- adc bx,1f61h
- add bl,7fh
- jc short wrtst1
- add bl,0a2h
- wrtst1: and bh,7fh ; StoJ end
-
- mov ax,0100h
- mov dx,1010h
- push ds
- call pword ptr fs:[00a0h] ; Get Kanji Font
- push ds ; ds:esi = Kanji Font
- pop es ; cheng ds<->es
- pop ds
-
- mov edi,[ebp+16] ; *vram
- or edi,[ebp+12] ; page
- mov ecx,[ebp+28] ; Y = 16 Dot Font
- align 4 ; align set
-
- wtkn1: mov bx,es:[esi]
- add esi,2
-
- cmp byte ptr [ebp+28],16
- je short wtkn2
- or bx,es:[esi]
- add esi,2
- wtkn2:
- movzx eax,bl ; Get Kanji Left Font Pattan
- mov eax,[eax*4+fntptn] ; Get Vram Bit Patan
- mov edx,eax
- not edx
- and eax,[ebp+20]
- and edx,[ebp+24]
- or eax,edx
- mov gs:[edi],eax ; Write Kanji Left Font
-
- movzx eax,bh ; Get Kanji Right Font Pattan
- mov eax,[eax*4+fntptn] ; Get Vram Bit Patan
- mov edx,eax
- not edx
- and eax,[ebp+20]
- and edx,[ebp+24]
- or eax,edx
- mov gs:[edi+4],eax ; Write Kanji Right Font
-
- add edi,512 ; 1 Line 512 Byte
- and edi,03FFFFh
- or edi,[ebp+12] ; Page
- loop wtkn1
-
- add dword ptr [ebp+16],8
- jmp wrtlop ; Next Put String Loop
-
- align 4 ; align set
- wrtank: ; Write Ank Font
- cmp al,1Bh ; Esc Code
- jne short wtak0
-
- movzx eax,byte ptr [esi]
- inc esi
- wtak0: mov [ebp+8],esi ; Save *str
- mov esi,eax
-
- cmp byte ptr [ebp+28],16
- jne short wrtft1
- shl esi,4 ; x16
- add esi,3D800h ; 8x16 ANK Font Offset
- jmp short wrtft2
- wrtft1: shl esi,3 ; x8
- add esi,3D000h ; 8x8 ANK Font Offset
-
- wrtft2: mov ax,138h ; ANK Font Selecter
- mov es,ax
-
- mov edi,[ebp+16] ; *vram
- or edi,[ebp+12] ; Page
- mov ecx,[ebp+28] ; Y = 16 Dot Font
- align 4 ; align set
-
- wtak1: movzx eax,byte ptr es:[esi] ; Get Font Pattan
- inc esi
- mov eax,[eax*4+fntptn] ; Get Vram Bit Patan
- mov edx,eax
- not edx
- and eax,[ebp+20]
- and edx,[ebp+24]
- or eax,edx
- mov gs:[edi],eax ; Write Ank Font
-
- add edi,512 ; 1 Line 512 Byte
- and edi,03FFFFh
- or edi,[ebp+12] ; Page
- loop wtak1
-
- add dword ptr [ebp+16],4
-
- jmp wrtlop ; Next Put String Loop
-
- wrtstr endp
- ;**************************************
- ; int inport(int portaddr)
- ;**************************************
- inport proc near
- push ebp
- mov ebp,esp
- push edx
- mov edx,[ebp+8]
- xor eax,eax
- in al,dx
- pop edx
- pop ebp
- ret
- inport endp
- ;**************************************
- ; VRAM Disp Start Addr Set
- ;**************************************
- public dsp_adr_set
- dsp_adr_set proc near
- push ebp
- mov ebp,esp
- push edx
-
- mov dx,0440h
- mov al,17 ; CRTC FA0
- out dx,al
- mov dx,0442h
- mov eax,[ebp+8]
- out dx,ax
-
- pop edx
- pop ebp
- ret
- dsp_adr_set endp
- ;***********************************
- ; Soft Timer
- ; Soft_time(int us) 1 = 10us
- ;***********************************
- public Soft_time
- Soft_time proc near
- mov cx,[esp+4]
- int 0FDh
- ret
- Soft_time endp
- ;***********************************
- ; int iskan(char *str);
- ;***********************************
- public iskan
- iskan proc near
- push esi
- mov esi,[esp+8]
-
- movzx eax,byte ptr [esi]
- mov al,[eax+offset kantbl]
- and al,ISKAN1
- jz nokan
- movzx eax,byte ptr [esi+1]
- mov al,[eax+offset kantbl]
- and al,ISKAN2
- jz nokan
- mov eax,1
- pop esi
- ret
-
- nokan: xor eax,eax
- pop esi
- ret
- iskan endp
-
- ;****************************************************
- ; cputstr(char *vram, char *str, int col, int bak)
- ; +8 +12 +16 +20
- ;****************************************************
- align 4 ; align set
- public cputstr
- cputstr proc near
- push ebp
- mov ebp,esp
- xor eax,eax
- push eax ; work push
-
- push gs
- push fs
- push es
- push esi
- push edi
- push edx
- push ecx
- push ebx
- cld
- mov ax,104h ; VRAM Selecter
- mov es,ax ; es = VRAM Selecter
- mov ax,0110h ; TBIOS Selecter
- mov fs,ax ; fs = TBIOS
- mov ax,ds
- mov gs,ax ; gs = ds
-
- align 4 ; align set
- cputlop: ; Put Loop
- mov esi,[ebp+12] ; char *str
- cputlp2:
- lodsb ; Get String ※
- or al,al
- je cLeft_clear ; End of String ?
-
- cmp al,0Ah ; \n skip
- je cputlp2
-
- movzx eax,al
- mov bl,[eax+offset kantbl]
- and bl,ISKAN1
- jz cputank ; Not iskanji1 ?
- movzx ebx,byte ptr [esi]
- mov bh,[ebx+offset kantbl]
- and bh,ISKAN2
- jz cputank ; Not iskanji2 ?
- mov bh,al
- inc esi ; doubel_word ????? ※
- mov [ebp+12],esi ; Save *str
-
- shl bh,1 ; Shift Jis to Jis
- cmp bl,080h
- adc bx,1f61h
- add bl,7fh
- jc short cknf1
- add bl,0a2h
- cknf1: and bh,7fh ; StoJ end
-
- mov ax,0100h
- mov dx,1010h
-
- call pword ptr fs:[00a0h] ; Get Kanji Font
-
- mov edi,ss:[ebp+8] ; *vram
- add edi,ss:[ebp-4] ; work add
- or edi,gs:[page_ofs] ; or Page Offset
- mov ebx,offset fntptn
- xor ecx,ecx ; ecx=0
-
- REPT 16
-
- lodsb ; Get Kanji Font Pattern
- mov cl,al ; Left Font Pattern
- mov eax,gs:[ebx+ecx*4] ; Get Vram Bit Patan
- mov edx,eax
- not eax
- and eax,ss:[ebp+20]
- and edx,ss:[ebp+16]
- or eax,edx
- stosd ; Write Left Font
-
- lodsb ; Get Kanji Font Pattern
- mov cl,al
- mov eax,gs:[ebx+ecx*4] ; Get Vram Bit Patan
- mov edx,eax
- not eax
- and eax,ss:[ebp+20]
- and edx,ss:[ebp+16]
- or eax,edx
- stosd ; Write Right Font
- add edi,512-4*2 ; 1 Line 512 Byte
-
- endm
-
- mov ax,gs
- mov ds,ax
- add dword ptr [ebp-4],8 ; Next vram Address
-
- jmp cputlop ; Next Put String Loop
-
- align 4 ; align set
- cputank: ; Write Ank Font
- mov [ebp+12],esi ; Save *str
- movzx esi,al
- shl esi,4 ; 4x16=64
- add esi,3D800h
-
- mov edi,[ebp+8] ; *vram
- add edi,[ebp-4] ; work add
- or edi,[page_ofs] ; or Page Offset
-
- mov ax,138h ; ANK Font Selecter
- mov ds,ax
- xor ecx,ecx
- mov ebx,offset fntptn
-
- REPT 16
- lodsb
- mov cl,al ; Left Font Pattern
- mov eax,gs:[ebx+ecx*4] ; Get Vram Bit Patan
- mov edx,eax
- not eax
- and eax,ss:[ebp+20]
- and edx,ss:[ebp+16]
- or eax,edx
- stosd ; Write Left Font
- add edi,512-4 ; Line add
- endm
-
- mov ax,gs
- mov ds,ax
-
- add dword ptr [ebp-4],4 ; Next vram Address
-
- jmp cputlop ; Next Put String Loop
-
- align 4
- cLeft_clear:
- ; VRAM Clear
- mov ebx,320
- sub ebx,[ebp-4] ; nokori dword
- je cnonclr
-
- mov edi,[ebp+8] ; *vram
- add edi,[ebp-4] ; work add
- or edi,[page_ofs] ; or Page Offset
- shr ebx,2 ; / 4
- mov eax,[ebp+20]
- mov ebp,[ebp-4]
- add ebp,512-320
- mov edx,03FFFFh
- mov esi,[page_ofs]
- REPT 16
- mov ecx,ebx ; nokori dword
- rep stosd
- add edi,ebp
- and edi,edx
- or edi,esi
- endm
- cnonclr:
- ; end of VRAM Clear
- pop ebx
- pop ecx
- pop edx
- pop edi
- pop esi
- pop es
- pop fs
- pop gs
-
- pop eax ; work pop
- pop ebp
- ret ; end of putstr
-
- cputstr endp
- ;
- ; void decode(char *vram,char *buf)
- ; +8 +12
- SLEEP equ 0FFFFh
-
- public ANI_decode
- ANI_decode proc near
- push ebp
- mov ebp,esp
- push edi
- push esi
- push edx
- push ecx
- push ebx
- push es
-
- mov slp_tim,SLEEP ; init sleep time
-
- mov ax,104h ; VRAM selecter
- mov es,ax
- mov edi,[ebp+8]
- mov esi,[ebp+12]
-
- declop: lodsw
- test ax,8000h
- jnz short decskip
- and eax,7FFFh
- add edi,eax
- jmp short declop
-
- decskip:cmp ax,0FFFFh
- je short decend
- cmp ax,0FFFEh
- je short decnew
- cmp ax,0FFFDh
- je short chgslp
- test ax,4000h
- jnz short decrep
-
- and ax,3FFFh
- movzx ecx,ax
- and ecx,3
- jz short dec1
- rep movsb
-
- dec1: movzx ecx,ax
- shr ecx,2
- jecxz short declop
- rep movsd
- jmp short declop
-
- chgslp: lodsw
- mov slp_tim,ax
- jmp short declop
-
- decnew: mov edi,[ebp+8]
- mov cx,slp_tim
- int 0FDh
- jmp short declop
-
- decrep: and ax,3FFFh
- movzx ecx,ax
- lodsd
- rep stosd
- jmp short declop
-
- decend: pop es
- pop ebx
- pop ecx
- pop edx
- pop esi
- pop edi
- pop ebp
- ret
- ANI_decode endp
-
- public vram_scrool
- vram_scrool proc near
- push ebp
- mov ebp,esp
- push edi
- push esi
- push ecx
- push edx
- push es
- push ds
-
- mov ax,104h ; VRAM selecter
- mov es,ax
- mov ds,ax
- mov edi,[ebp+8]
- mov esi,edi
- add esi,512*16 ; next char Line
-
- mov edx,[ebp+12]
- vr_lp: mov ecx,320/4
- rep movsd
- add esi,192
- add edi,192
- dec edx
- jne short vr_lp
-
- xor eax,eax
- mov edx,16
- vr_cr: mov ecx,320/4
- rep stosd
- add edi,192
- dec edx
- jne short vr_cr
-
- pop ds
- pop es
- pop edx
- pop ecx
- pop esi
- pop edi
- pop ebp
- ret
- vram_scrool endp
-
- ;************************************
- ;void wrt_ank(int ch,int adr);
- ; +8 +12
- ;************************************
- public wrt_ank
- wrt_ank proc near
- push ebp
- mov ebp,esp
-
- push es
- push esi
- push edi
-
- mov ax,104h ; VRAM Selecter
- mov es,ax ; es = VRAM Selecter
-
- movzx esi,byte ptr [ebp+8]
- shl esi,6 ; 4x16=64
- add esi,offset ankfnt ; ANK Font Table Offset
-
- mov edi,[ebp+12] ; *vram
- or edi,[page_ofs] ; or Page Offset
- mov ecx,512-4
- REPT 15
- movsd ; Trans Font
- add edi,ecx ; Line add
- endm
- movsd ; Trans Font
-
- pop edi
- pop esi
- pop es
-
- pop ebp
- ret
- wrt_ank endp
-
- ;************************************
- ;void wrt_kan(int ch,int adr);
- ; +8 +12
- ;************************************
- public wrt_kan
- wrt_kan proc near
- push ebp
- mov ebp,esp
-
- push fs
- push gs
- push es
- push ds
- push esi
- push edi
- push edx
- push ebx
-
- mov ax,104h ; VRAM Selecter
- mov es,ax ; es = VRAM Selecter
- mov ax,0110h ; TBIOS Selecter
- mov fs,ax ; fs = TBIOS
- mov ax,ds
- mov gs,ax ; gs = ds
-
- movzx ebx,word ptr [ebp+8]
- shl bh,1 ; Shift Jis to Jis
- cmp bl,080h
- adc bx,1f61h
- add bl,7fh
- jc short wt_kn1
- add bl,0a2h
- wt_kn1: and bh,7fh ; StoJ end
-
- mov ax,0100h
- mov dx,1010h
-
- call pword ptr fs:[00a0h] ; Get Kanji Font
-
- mov edi,ss:[ebp+12] ; *vram
- or edi,gs:[page_ofs] ; or Page Offset
- mov ebx,offset fntcol
- xor edx,edx ; edx=0
- xor ecx,ecx ; ecx=0
- REPT 16
- lodsw ; Get Kanji Font Pattern
- mov cl,al ; Left Font Pattern
- mov dl,ah ; Right Font Pattern
- mov eax,gs:[ebx+ecx*4] ; Get Vram Bit Patan
- stosd ; Write Left Font
- mov eax,gs:[ebx+edx*4] ; Get Vram Bit Patan
- stosd ; Write Right Font
- add edi,512-4*2 ; 1 Line 512 Byte
- endm
-
- pop ebx
- pop edx
- pop edi
- pop esi
- pop ds
- pop es
- pop gs
- pop fs
-
- pop ebp
- ret
- wrt_kan endp
-
- ;************************************
- ;void wrt_cur(int adr);
- ; +8
- ;************************************
- public wrt_cur
- wrt_cur proc near
- mov eax,[esp+4]
- push fs
- mov cx,104h ; VRAM Selecter
- mov fs,cx
- not dword ptr fs:[eax]
- not dword ptr fs:[eax+512]
- pop fs
- ret
- wrt_cur endp
-
- VRAM ends
- end